<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

/**
 * Controladora do gerenciamento de produtos
 * 
 * @package application/controllers/adm
 * @name Usuarios
 * @author Joao Claudio Dias Araujo <joao.araujo@tellks.com.br>
 */
class Produtos extends TR_Controller {

    function __construct() {

        parent::__construct();

        // Verifica o acesso do produto a esta funcionalidade
        if (!$this->autenticacao->verifica_acesso()) {

            redirect($this->config->item('area_admin') . '/acesso_negado');
        }

        // Carrega as configuracoes do produto
        $this->load->config('produtos');

        // Carrega a library de criptografia para criptografar a senha
        $this->load->library('encrypt');

        // Carrega a library de validacao
        $this->load->library('form_validation');

        // Carrega models utilizadas
        $this->load->model(array(
            $this->config->item('area_admin') . '/produto_model',
            $this->config->item('area_admin') . '/categoria_model'
        ));
    }

    function index() {

        // Delega a acao a ser executada para o metodo all
        $this->all();
    }

    /**
     * Lista os registros cadastrados
     * 
     * @return void
     */
    function all() {

        $dados['produtos'] = $this->produto_model->get_all();

        $dados['titulo'] = 'Gerenciar produtos';
        $dados['view'] = $this->config->item('area_admin') . '/produtos/index';

        $this->load->view($this->config->item('area_admin') . '/layout', $dados);
    }

    /**
     * Exibe o formulario de cadastramento de um novo produto
     * 
     * @return void
     */
    function cadastrar() {
        $dados['categorias'] = $this->categoria_model->get_categorias();
        $dados['titulo'] = 'Cadastrar produto';
        $dados['view'] = $this->config->item('area_admin') . '/produtos/editar';
        $dados['js'][] = 'plugins/jquery.validate';
        $dados['js'][] = 'pages/editar_produto';

        $this->load->view($this->config->item('area_admin') . '/layout', $dados);
    }

    function editar($id) {

        $dados['produto'] = $this->produto_model->get_by_id($id);
        $dados['categorias'] = $this->categoria_model->get_categorias();
        $dados['titulo'] = 'Editar produto';
        $dados['view'] = $this->config->item('area_admin') . '/produtos/editar';
        $dados['js'][] = 'plugins/jquery.validate';
        $dados['js'][] = 'pages/editar_produto';

        $this->load->view($this->config->item('area_admin') . '/layout', $dados);
    }

    function salvar() {

        // Busca as regras de validacao nos arquivos de configuracao
        $regras = $this->config->item('regras_validacao');

        // Seta as regras na library de validacao
        $this->form_validation->set_rules($regras);

        // Seta o html das mensagens de validacao
        $this->form_validation->set_error_delimiters('<label class="error">', '</label>');

        $produto = new stdClass();
        $id = $this->input->post('id');
        $produto->descricao = $this->input->post('descricao');
        $produto->nome = $this->input->post('nome');
        $produto->preco = $this->input->post('preco');
        $produto->quantidade = $this->input->post('quantidade');
  
        $produto->categoria_id  = $this->input->post('categoria');
        
        // Executa a validacao
        if ($this->form_validation->run() === FALSE) {

            // Caso os dados sejam invalidos exibe o formulario de validacao novamente

            $produto->id = $id;
            $dados['produto'] = $produto;
            $dados['categorias'] = $this->categoria_model->get_categorias();
            $dados['titulo'] = 'Editar produto';
            $dados['view'] = $this->config->item('area_admin') . '/produtos/editar';
            $dados['js'][] = 'plugins/jquery.validate';
            $dados['js'][] = 'pages/editar_produto';

            $this->load->view($this->config->item('area_admin') . '/layout', $dados);
        } else {


            // Verifica se deve atualizar ou inserir o registro
            if (empty($id)) {

                // Caso nao seja informado o ID do registro a ser atualizado insere um novo
                $resultado = $this->produto_model->inserir($produto);
            } else {

                $produto->id = $id;
                $resultado = $this->produto_model->atualizar($produto);
            }

            // Captura o resultado da operacao e seta a mensagem a ser exibida para o produto
            if ($resultado) {

                if (empty($id)) {

                    $mensagem = array('msg' => 'insert-ok', 'tipo' => 'success');
                } else {

                    $mensagem = array('msg' => 'update-ok', 'tipo' => 'info');
                }
            } else {
                $mensagem = array('msg' => 'erro', 'tipo' => 'danger');
            }

            // Grava a mensagem numa flashdata
            $this->session->set_flashdata('msg', $mensagem);
            
            // Redireciona o produto para a tela de gerenciamento
            redirect($this->config->item('area_admin') . '/produtos', 'refresh');
        }
    }

    /**
     * Recebe o ID do registro e executa a remocao
     * 
     * @param int $id ID do registro
     * @return void
     */
    function remover($id) {

        // informa o banco de dados qual registro deve ser removido
        $resultado = $this->produto_model->remover($id);

        // Captura o resultado da operacao
        if ($resultado) {

            $mensagem = array('msg' => 'delete-ok', 'tipo' => 'success');
        } else {
            $mensagem = array('msg' => 'erro', 'tipo' => 'danger');
        }

        // Seta a mensagem numa flashdata
        $this->session->set_flashdata('msg', $mensagem);

        //Redireciona para a tela de gerenciamento
        redirect($this->config->item('area_admin') . '/produtos', 'refresh');
    }

}
